

#ifndef UC_GECSPL3D_H
#define UC_GECSPL3D_H

class UcGePointOnCurve3d;
class UcGeCurve3dIntersection;
class UcGeInterval;
class UcGePlane;

#include "zgesent3d.h"
#include "zgept3dar.h"
#include "zgevc3dar.h"
#include "zgevec3d.h"
#include "zgekvec.h"
#pragma pack (push, 8)

class
GE_DLLEXPIMPORT
UcGeCubicSplineCurve3d : public UcGeSplineEnt3d
{
public:

    UcGeCubicSplineCurve3d();
    UcGeCubicSplineCurve3d(const UcGeCubicSplineCurve3d& spline);

    UcGeCubicSplineCurve3d(const UcGePoint3dArray& fitPnts,
			   const UcGeTol& tol = UcGeContext::gTol);

    UcGeCubicSplineCurve3d(const UcGePoint3dArray& fitPnts,
			   const UcGeVector3d& startDeriv,
			   const UcGeVector3d& endDeriv,
                           const UcGeTol& tol = UcGeContext::gTol);

    UcGeCubicSplineCurve3d(const UcGeCurve3d& curve,
                           double epsilon = UcGeContext::gTol.equalPoint());

    UcGeCubicSplineCurve3d(const UcGeKnotVector& knots,
	                   const UcGePoint3dArray& fitPnts,
			   const UcGeVector3dArray& firstDerivs,
	                   ZSoft::Boolean isPeriodic = ZSoft::kFalse);

    int                     numFitPoints   ()        const;
    UcGePoint3d             fitPointAt     (int idx) const;
    UcGeCubicSplineCurve3d& setFitPointAt  (int idx, const UcGePoint3d& point);
    UcGeVector3d            firstDerivAt   (int idx) const;
    UcGeCubicSplineCurve3d& setFirstDerivAt(int idx, const UcGeVector3d& deriv);

    UcGeCubicSplineCurve3d&  operator = (const UcGeCubicSplineCurve3d& spline);
};

#pragma pack (pop)
#endif
